package com.itheima.mm.service.impl;

import com.itheima.mm.dao.PermissionDao;
import com.itheima.mm.dao.RoleDao;
import com.itheima.mm.dao.UserDao;
import com.itheima.mm.pojo.Permission;
import com.itheima.mm.pojo.Role;
import com.itheima.mm.pojo.User;
import com.itheima.mm.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;

/**
 * 包名:com.itheima.mm.service
 * 作者:Leevi
 * 日期2020-01-15  10:24
 */
@Service
public class UserService implements IUserService {
    @Autowired
    private UserDao userDao;

    @Autowired
    private RoleDao roleDao;

    @Autowired
    private PermissionDao permissionDao;
    /**
     * 处理登录的方法
     * @param loginUser
     * @return
     */
    @Override
    public User login(User loginUser) throws Exception {
        //1. 调用dao层的方法，根据用户名查找用户
        User user = userDao.findUserByUsername(loginUser.getUsername());
        if (user != null) {
            //用户名正确
            //2. 校验密码
            //根据loginUser里面的密码和user里面的密码对比
            if (loginUser.getPassword().equals(user.getPassword())) {
                //密码正确
                //3.只有在登录成功的时候，我们才获取用户的角色、权限信息
                //3.1 根据用户的id，获取用户的角色信息
                List<Role> roleList = roleDao.findRoleListByUserId(user.getId());

                //声明一个集合，存放角色和权限的关键字
                List<String> authorityList = new ArrayList<>();
                //判断，该用户的角色列表是否为空
                if (roleList != null && roleList.size() > 0) {
                    // 将该用户的角色信息，存储到用户信息里面
                    for (Role role : roleList) {
                        String roleKeyword = role.getKeyword();
                        authorityList.add(roleKeyword);

                        //根据角色的id，查询出权限信息
                        Integer role_id = role.getId();//角色id
                        //3.2 根据角色的id查询出权限列表
                        List<Permission> permissionList = permissionDao.findPermissionListByRoleId(role_id);
                        if (permissionList != null && permissionList.size() > 0) {
                            //遍历出每一个权限
                            for (Permission permission : permissionList) {
                                String permissionKeyword = permission.getKeyword();//权限的关键字
                                //将权限的关键字存储到集合中
                                authorityList.add(permissionKeyword);
                            }
                        }
                    }
                }
                //将存储了角色关键字、权限关键字的集合，绑定到user对象上
                user.setAuthorityList(authorityList);
                return user;
            }else {
                //密码错误
                throw new RuntimeException("密码错误");
            }
        }else {
            //用户名错误
            throw new RuntimeException("用户名错误");
        }
    }
}
